Micro-optimization: replace nested list comprehension in qsim_circuit.py#1030
Draft
mhucka wants to merge 2 commits intoquantumlib:mainfrom
Draft
Micro-optimization: replace nested list comprehension in qsim_circuit.py#1030mhucka wants to merge 2 commits intoquantumlib:mainfrom
mhucka wants to merge 2 commits intoquantumlib:mainfrom
Conversation
…conversion The original code used a nested list comprehension `[val for i in list(cirq.unitary(qsim_gate).flat) for val in [i.real, i.imag]]`, which created multiple temporary lists: one for the entire flattened array and one for each complex number's real/imaginary pair. By replacing this with an explicit `for` loop and direct `.append()` calls, we avoid these allocations. Benchmarks show a ~25% performance improvement for this conversion logic.
Contributor
There was a problem hiding this comment.
Code Review
This pull request modifies the add_op_to_circuit function in qsimcirq/qsim_circuit.py to replace a nested list comprehension with an explicit loop for flattening unitary matrices into interleaved real and imaginary components. A review comment suggests a more efficient and idiomatic approach using a numpy view to perform this transformation, which aligns with the style guide's emphasis on performance and vectorization.
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The original code used a nested list comprehension
[val for i in list(cirq.unitary(qsim_gate).flat) for val in [i.real, i.imag]], which created multiple temporary lists. We can avoid this by using some NumPy functionality, specifically theravel()operation and NumPy views. This reinterprets the complex number array as a float array with interleaved real and imaginary parts, which is what the original list comprehension did.